시계열 분석을 위한 1번째 단계이다. 이번 단계에서는 독립 변수가 하나인 Univariate 시계열 분석( ETS( Error, Trend, Seasonal ) 모델과 같은 AR, MA, ARIMA )에 대한 여러 주제를 살펴보자.

모오옥차

1.시계열 개요

Table of Contents

모든 회사는 심한 경쟁, 연구 실패, 노사 관계, 인플레이션, 침체, 정부 정책 변화와 같은 여러 Challenge와 위험을 마주한다. 당연하게도, 모든 기업은 불확실성과 위험에 노출되어 있다. 위험으로 인한 피해를 줄이고, 다가오는 위험은 어떤 것인가를 알기 위해 예측이 필요하다. 다양한 예측 모델이 있는데, 대부분 많이 사용하는 것은 아래와 같다.

  1. 회귀( Regression )
  2. 데이터 발굴( Data Mining Mehthods )
  3. 시계열( Time Series )

왜 예측마다 다른 테크닉을 사용할까? 데이터의 생김새, 특징이 제 각각 다르기 때문에 서로 다른 테크닉을 사용한다. 예를들어 회귀나 CART는 여러 개의 예측 변수( predictors )에서 1개의 응답( response )를 얻는다.

예측은 historical data를 이용해서 미래 Trend의 방향을 결정하는 예측 가능한 정보를 만들어 내기 위한 기술이다. 경영에서는 미래의 예산과 지출을 어떻게 산정할 지 예측할 때 사용한다.

이번 단계에서, 시계열 데이터의 상세 내용과 어떻게 분석, 예측할 수 있는지 알아봅시다.

2. 시계열이 뭐에요?

Table of Contents

시계열이란 시간의 흐름에 따라서 모은 동일한 변수들의 측정값( 그냥 measurement라 하겠다. ) 급수( 역시 그냥 Series 라 하겠다... )이다. 이러한 measurement들은 일정한 시간 간격에 따라서 만들어진다. 시계열은 시간의 순서에 따른 Data point들의 Series이다. 대부분, 시계열은 해당 구간 내에서 동일한 point 간격으로 떨어진 형태로 보여진다. 따라서 discrete-time data의 sequence 이다.

시계열 데이터의 간격

  1. 연간( Yearly ): GDP, 거시 경제 자료
  2. 분기( Quarterly ): 회사의 매출
  3. 월간( Monthly ): 매출, 지출, 봉급
  4. 주간( Weekly ): 수요, 휘발유/경유 가격
  5. 일간( Daily ): 주식 종가, 지수값, ATM의 일간 거래 내역
  6. 매시( Hourly ): 대기 환경 지수( 미세먼지...? )

시계열 분석은 자산, 증권, 경제 변수가 시간에 따라서 어떻게 변했는지를 보여주는 유용한 방법이다. 선택한 데이터를 동일한 구간에서 다른 변수와 비교하고 얼마나 변화가 생겼는지 확인할 때도 사용된다.

3.이것은 시계열 아님.

Table of Contents

4. 시계열 데이터 어디서 찾을 수 있어요?

Table of Contents

대부분 우리가 마주치는 시계열 데이터의 대표적인 사례는 아래와 같다.

다시 말해서, 우리는 시계열 데이터를 수집하고, 데이터 기반으로 의사 결정을 내리는데 활용할 수 있다.

5. 시계열 데이터의 특징

Table of Contents

다음에 언급된 특징들은 시계열 분석 및 머신러닝 분석을 쉽지 않게 만든다.

데이터가 cross-sectional인 경우, observation의 순서는 중요하지 않지만, 시계열의 경우에는 중요하다.

6. 시계열 추정

Table of Contents

시계열 데이터는 몇 가지 공통괸 추정치를 갖는다. 가장 유념해야 할 것은...

아주 장기 예측은 잘 동작하지 않는다. !!

사용가능한 데이터가 있다고 해도, 우리는 몇 주기 이상의 예측을 시도해서는 안된다.

7.시계열 유형

Table of Contents

a) 단일 변수 시계열

시간에 종속적인 변수가 하나만 있는 Series이다. ( 예를 들어, 특정 시구간에서의 수요 )

하나의 관찰치를 동일한 시간 간격으로 연속적으로 가진 것을 의미함. 예를 들어, 월간 이산화탄소 농축치와 엘니뇨 예측 등..

아래 코드를 보자. 1981년 부터 1990년대까지 월별로 남반구의 최저 온도 값을 가진 Dataset이 있다. 온도가 종속 변수( Dependent variable )이다.

보통 우리는 다음 몇 달치 온도를 예측하려고 할 때, 과거의 값들을 보고, 어떤 패턴이 있는지 찾아내려고 한다. 매년 어떤 계절적 특성 패턴을 살펴보자. 특정 관찰값들은 미래 값들을 예측하는데 도움을 준다. 주의점: 우리는 "온도"라는 단일 변수( 과거 19년치 )만 사용한다는 점을 유의하라.

이런 분석을 Univariate Time Series Analysis/Forecasting( 단일변수 시계열 분석, 예측 ) 이라고 한다.

b) 다중 변수 시계열 분석

다중변수 시계열 데이터는 한 시점에 1개 초과의 데이터를 가진다. 각 변수는 과거값 뿐만 아니라, 다른 변수의 영향도 받는다. 이런 종속관계가 미래의 값을 예측하는데 사용된다. 아래 웹 사이트를 한변 살펴보아라.

대기 오염 예측

이 데이터셋은 지난 5년간 중국 북경 주재 미국 대사관에서 매 시간마다 측정한 날씨, 대기 오염도 데이터이다. 본 데이터는 시간, PM2.5, Dew point( 이슬점 ), 온도, 기압, 풍향, 풍속, 누적 강우량, 누적 적설량을 포함하고 있다.

Raw 데이터 형태( 전체 Feature )는 아래와 같다.

Sl No Variable Description
1 No row number
2 qyear year of data in this row
3 month month of data in this row
4 day day of data in this row
5 hour hour of data in this row
6 pm2.5 PM2.5 concentration
7 DEWP Dew Point
8 TEMP Temperature
9 PRES Pressure
10 cbwd Combined wind direction
11 Iws Cumulated wind speed
12 Is Cumulated hours of snow
13 Ir Cumulated hours of rain

이전 시간의 날씨, 오염 상태가 있을 때, 다음 시간의 대기 오염 수치에 대해서 예측해보자.

첫 24시간 중 PM2.5 데이터 중 NA 값이 있는지 확인해보자. 첫 번째 Row를 제거해야 할 것이다. 그 외, 몇 가지 NA 값이 있을 것이다. 우선 그 NA 데이터들을 0으로 채워보자.

8. Python으로 시게열 객체 읽기, 쓰기

Table of Contents

예제 1

미국 항공 여객 데이터셋 사용

예제 2

인도 GDP Series 데이터를 읽고, TS 데이터를 저장해 본다. 데이터는 1960-01-01 ~ 2017-12-31 까지이다. 아래는 Python으로 객체 데이터 Binary로 IO하는 Pickle에 대한 설명 자료 이다. 참고.

Python의 어떤 객체라고 Pickle을 통해서 IO가 가능하다. Pickle은 Python 객체( list, dict 등... )를 character stream으로 변환하는 방법 중 하나이다. 본 방법을 이용하면 다른 Python script에서 동일한 형태의 Python 객체를 불러올때 유용하게 사용할 수 있다.

TS 객체를 저장하고, Pickle object를 불러와보자.

9. 시계열의 구성요소

Table of Contents

시계열의 구성요소는 아래와 같다. :-

추세( Trend ) & 계절성( Seasonality )

샴푸 판매 데이터셋을 예제로 들어보자.

본 데이터셋은 3년 동안의 월별 샴푸 판매량 데이터를 나타낸 것이다. 판매량이 단위이고, 36개 관찰결과가 있다. 원본 데이터셋은 Makridakis, Wheelwright, and Hyndman (1998) 이 만들었다.

Data source:https://github.com/jbrownlee/Datasets

아래가 첫 5개의 데이터 이다.

Month Sales
1-01 266.0
1-02 145.9
1-03 183.1
1-04 119.3
1-05 180.3

위 그래프는 상승 경향을 보인다.

일간 최저 기온 데이터셋

본 데이터셋은 호주, 멜버른의 1981 - 1990에 걸친 10년 간의 최저 온도 값을 갖고 있다.

단위는 섭씨이며 3,650개의 측정 결과가 있다. 본 데이터의 출처는 호주 기상청이다. 5개의 데이터만 보면 아래와 같다.

Date Temperature
1981-01-01 20.7
1981-01-02 17.9
1981-01-03 18.8
1981-01-04 14.6
1981-01-05 15.8

위 그래프는 아주 강한 계설정을 보여준다.

이제 우리는 매월 변화량을 Box Plot으로 그릴 수 있게 되었다. 계절적인 요소가 여름부터 겨울까지 Swing으로 보여진다.

이 그림은 최저 온도의 변화가 보여지는데, 남반구의 여름이 1월부터 시작되고, 겨울이 매년 중간, 그리고 막판에 다시 여름이 되어 가는 모습을 보여준다.

최저 온도 데이터셋을 연도별로 그룹핑해본다. Box와 Whisker plot이 연도별로 배치되서 상호 비교하기가 쉬워진다.

연도별 큰 차이는 보이지 않는다.

트랙터 판매 데이터 본 데이터는 2020년 매월 판매된 트랙터의 개수에 대한 데이터이다.

위 그래프를 보면 확연한 계절적인 요소가 보인다. 2011년 기준으로 월간 변화량을 boxplot으로 그려보자.

매년 5 ~ 8월 사이에 높은 판매량이 일어나는 계절적인 요인을 볼 수 있다.

샴페인, 음식데이터로 동일한 분석을 수행하면 계절적 요인이 있다는 것을 볼 수 있다.

10.시계열 분해

Table of Contents

Additive Model

Additive Decomposition

통계 보델 라이브러리들은 이에 대한 Naive, Classical한 분해 함수를 제공한다. ( seasonal_decompose() ) 여기서 Additive 인지 Multiplicative인지 설정해야 한다.

seasonal_decompose() 함수는 Decomposition 해서 4개 조각을 담은 배열 객체를 반환한다.

소매 회전율 데이터에 대한 Additive model decomposition

위 코드를 돌리면 분해 작업을 수행한다. 4개의 Series 결과가 바로 그것이다. 어떤 추세와 계절성이 확실히 분리되어 보이는 것이 보인다.

Multiplicative model

Multiplicative Decomposition

국제 항공 여객 데이터를 이용해서 Multiplicative model decomposition을 수행해보자.

위 코드를 실행하면 4개으 결과가 나온다. 추세와 계절성이 확연히 분리된 것이 보인다.

트랙터 판매에 대해서 Multiplicative model decomposition을 수행해보자.

계절성 시각화 - 월간

소매 회전율 데이터를 사용해서 시각화를 수행해보자.

관찰

확실히 1분기의 회전율이 높고, 2분기의 회전율이 낮은 것을 알 수 있다.

이번에는 석유 데이터를 이용해서 계절성이 있는지 확인해 보자.

계절성 지표들

11.이동 평균 예측

Table of Contents

Moving Average Smoothing은 간단하고, 효율적인 시계열 예측 방법이다. Smoothing은 시간의 흐름에 따른 미세한 변동성을 없애주는 기법이다.

Moving average를 계산하려면 본래 시계열 데이터에 Raw 측정값의 평균이라는 새로운 Series를 만들어야한다. 이동 평균은 Window size를 정해줘야 한다. Moving average 산출에 필요한 Raw 관찰값들의 개수이다.

이동 평균의 2가지 주요 유형:

1) Centered moving average - t 시간 이전, 이후의 Raw 관찰값들의 평균

2) Trailing moving average - 과거 관찰값들을 이용, 시계열 예측에 사용

Pandas의 rolling() 함수는 각 관찰값들을 하나의 Window에 넣어준다. Window 크기를 넣으면 이동하는 Window가 생성이 된다. 이동하는 Window가 생겨나면 Dataset이 변동될 때 마다의 평균값을 뽑아낼 수 있다.

기온 데이터의 평균과 이동 평균

평균 온도를 Plotting 해보자.

예측 평균을 Plotting 해보자.

기온 평균과 이동 평균 예측값을 같이 Plotting 해보자.

US GDP를 Window size 5로 잡아서 이동 평균을 만들어 보자.

이동 평균선이 원본 데이터에 아주 근접하게 붙어서 이동하는 것을 볼 수 있다.

인도 GDP를 Window size 3으로 이동 평균 구하기.

이동 평균선이 원본 데이터에 붙어서 이동하는 것을 알 수 있다.

12. 빠진 데이터 다루는 법

Table of Contents

빠진 데이터

1. 시계열과 같이 순서대로 되어 있는 데이터에서 누락 데이터는 허용될 수 없다.

2. 빈 공간을 채우기 위해서 데이터를 단순히 이동시켜서는 안된다.

데이터가 빠진 이유( 이유는 많겠지... )

1) 수집이나 기록이 안됨.

2) 실제로 데이터가 없음.

3) 데이터 오염

누락 데이터 기록 방법

누락 데이터 삽입

간단하게 누락 데이터를 넣을 수 있다. dtype을 고려해서 넣는다.

누락 데이터를 포함한 계산

Descriptive statistics와 computational statistical methods는 누락 데이터를 다룰 수 있도록 작성되어 있다.

예제:

시계열은 시간의 순서대로 나열된 데이터 포인터 Series이다. 대부분 사람들은 누락된 값이 있으면, 그 부근에 있는 데이터로 대체하려는 움직임을 보인다. 보통 이미 있는 데이터를 이용해서 Imputation( 결측값 대체 ), Interpolation( 보간 ) 방법을 이용하고는 한다.

누락 값을 대체하기 위한 Imputation을 하는 방법은 아래와 같다.

Method When suitable
Take average of the nearest neighbours( 가장 근접한 것들의 평균 산출 ) Data has no seasonality( 계절성이 없을 때 )
Take average of the seasons from two or all available years( 2개 이상의 연도에서 계절별 평균 산출 ) Data has seasonality( 계절성이 있을 때 )
Interpolate function of pandas( pandas의 interpolation 함수 사용 )
Linear interpolation( 선형 보간법 ) Relationship in the interval of two samples is a first order polynomial( 2개 Sample 사이에서 1차 다항식이 나오는 경우 )
Polynomial such as Quadratic or Cubic interpolation( Quadratic, Cubic 보간법과 같이 다항식이 나오는 경우 ) Second or third order polynomial describes the interval between two samples( 2개 이상의 Sample들 사이에서 2, 3차 다항식이 나오는 경우 )
Spline Handles non-uniform spacing of samples( Sample들 사이에서 정형화된 무언가가 없을 때 )

예제

이번 예제는 아래 URL을 참고해보자.

예제 2 :- 물 사용 데이터

  1. 아래 URL에서 데이터와 내용을 확인 바람.:-

한계

13. 시계열 범위, 정확도, 그리고 다양한 요구사항들...

Table of Contents

시계열 예측 모델은 예측, 예측에 대한 신뢰 구간 정보를 모두 만들어 낼 수 있다.

예측 범위

실제 관측값에 대한 위, 아래 신뢰구간

이는 예측 대비 실제 가능한 결과의 범위를 평가하거나, 모델의 동작 방법을 이해하는데 유용하게 사용된다. 예를 들어 python을 이용한 ARIMIA 모델은 모델 결과 객체를 반환하는데, forecast() 함수를 이용하면 3가지 결과 값을 보여준다.

예측 정확도

예측에 대한 오차는 예측과 실제 데이터 간의 차이를 의미한다. 정확도를 측정하는 대표적인 지표는 RMSE, MAPE 이다.

예측에 필요한 사항들

시계열 모델은 반드시 각 값들에 대한 시간 컬럼( Unique, 입력, 적어도 예측 가능한... )을 갖고 있어야 한다. 시계열 데이터는 보통 Cleaning, Scailing, Transformation을 필요로 한다.

Frequency( 주기 ): 데이터는 모델입장에서 너무 많은 주기를 갖고 있거나, Resampling이 필요할만큼 고르지 않은 주기를 갖는 경우가 있다.

Outliers( 아주 예외적인 값, 탈 인간계...? ): 데이터는 별도로 식별 혹은 처리되어야 하는 극도로 차이나는 값들을 갖고 있을 수 있다.

Frequency:

Resampling:

Up-sampling

예제

Up-sampling frequency

Inference( 추론 )

resample()이 NaN으로 채워진 rows를 만든 것을 봤다. 다음으로 누락된 값을 새로 만들어진 주기에 맞추어 집어 넣어야 한다.interpolate 함수를 사용하면 된다. 사용 가능한 데이터 사이를 일직선으로 긋고, 그 데이터를 사용한다고 생각하면 된다.

다른 일반적인 보간법

Down-sampling Frequency

예제

이제 월별 데이터를 연도별 데이터로 만들 수 있게 되었다. Down-sample을 alias로 year-end 주기로 만들되, 각 연도별 전체 판매량을 합산한 것으로 사용하자.

Outliers 데이터는 간혹 오염되거나, 매우 튀는 값을 갖는데, 이 것을 따로 식별해주거나 처리해주어야 한다.

Outliers을 찾는 것은 어렵다.

Decomposition은 일반적이지 않은 관측값을 식별해준다.

Outliers는 없어질 수 없다. - Decomposition에서 얻은 어떤 정보를 이용해서 최재한 Impute 하는 것이 필요하다.

Trends의 종류

Detrend a time series is by differencing?????

추론

데이터에서 특정 추세가 보이지 않는다. 특정 추세가 모델링 되면, 시계열 데이터에서 제거될 수 있다...?

Model fitting을 통한 Detrend

샴푸 데이터를 보자.

scikit-learn의 LinearRegression mode을 이용해서 데이터를 학습시켜보자.

추론

파란색 실제 데이터위로 오랜지색 추세선이 그려진다.

계절성 변동이 보여질 수 있다.

Seasonal adjustment with differencing

최저 기온 데이터를 가지고 seasonality differencing을 진행해보자.

정확도 측정

최적의 모델을 찾기 전에 보통 Moving avereage, Exponential smoothing을 사용해 본다. 모델 선택은 예측 정확도 측정방법에 의해서 결정되는데, 이를 테면

n개의 관측값이 있고, Yn은 n 시점에서의 값 Y를 의미하고, Fn은 예측된 값을 의미하고, RMSE와 MAPE는 예측 정확도를 측정할 때 사용되는 가장 대표적인 지표이다.

예제

일별 여성 출생 데이터를 사용해보자. 데이터는 1959년 캘리포니아의 일별 여성 출생자 수를 가지고 있다. 3일 Window로 Moving average를 만들고, RMSE, MAPE로 얼마나 잘 맞는지 확인해봐라.

Window 크기 2, 4로 해서 다시 수행하고, 정확도가 증가되는지 아닌지 확인해보라. 샴페인 데이터를 이용해서 Seasonality 데이터를 확인해보고, 다양한 Window 크기로 Decomposing을 수행한 다음 이동 평균을 구해보아라. 그리고 RMSE, MAPE를 측정해 보아라.

14.ETS 모델들

Table of Contents

ETS model은 단일 변수 시계열을 예측하는 방법이다.; 추세, 계절성 요소 관측에 좋다.

14. 1SES, Holt & Holt-Winter Model

Table of Contents

Exponential Smoothing methods

Exponential smoothing methods에는 시계열 데이터 평탄화 과정이 포함되어 있다.
Exponential smoothing averages나 exponentially weighted moving averages는 이전 주기의 데이터를 기반으로 예측을 수행하되, 오래된 관측값으로부터는 지수적으로 적게 영향을 받는다.
Exponential smoothing methods는 별도의 Notation을 사용하는데, E = Error, T = Trend, S = Seasonality, N = none, A = additive, Ad = additive damped, M = Multiplicative, Md = multiplicative damped 와 같이 사용한다.
하나 이상의 파라미터가 Weights decay 속도 조절용으로 사용된다.
각 파라미터들의 값은 0 ~ 1 사이에 있다.

14.1.1 SES - ETS(A, N, N) - Simple smoothing with additive errors

Exponentially smoothing methods의 가장 간단한 방법은 Simple exponential smoothing( SES ) 이다.
본 방법은 명확한 추세, 계절성이 없는 경우 데이터 예측에 아주 적합한 기능이다.

1960년 Winters에 의하면 time( t + 1 )에서의 SES를 통한 예측 값은,

Parameter $\alpha$는 smoothing constant이고, 그 값은 0 ~ 1 사이에 있다. 모델이 Smoothing 상수를 하나만 사용하기 때문에 Single Exponential Smoothing이라고 부른다.

2001.01 ~ 2013.09 기간의 석유데이터를 보자.

SimpleExpSmoothing 클래스를 만들고, 학습 데이터를 입력해라.

fit() 함수는 fit smoothing_level 과 같은 fit 설정 값을 받아야 하는데, 이를 생략하거나 None 값을 넣으면, 알아서 값을 최적화한다. $\alpha$에 0.1, 0.5, 0.99와 같이 여러 값을 넣어보고, Model이 $\alpha$를 최적화 하도록 만들어야겠다.

1에 가까운 값: 빠른 학습( 가장 최근의 값들을 예측에 사용 ) 0에 가까운 값: 늦은 학습( 가장 과거의 값에 큰 영향을 받도록... )

아래 책의 Page 89을 보면된다.

conf 값을 생략해서 최적의 $\alpha$ 값을 찾도록 하고, 그 결과를 모델에 사용할 수 있도록 해보자.

추론

최적의 $\alpha$ 값을 확인하고, RMSW, MAPE도 다른 $\alpha$ 값보다 작은 것을 확인했다

다른 방법도 해 볼 수 있다.

14.1.2 Holt - ETS(A, A, N) - Holt's linear method with additive errors

Table of Contents

Double Exponential Smoothing

Double Exponential Smoothing는 예측을 위해서 2개 수식을 사용한다. 하나는 단기 예측 평균 값 혹은 Level이고, 나머지 하나는 추세 탐지를 위한 것이다.

Here, $\alpha$ and $\beta$ 들은 각각 Level, Trend를 위한 Smoothing 상수이다.

t + 1 시점에서의 예측은 아래와 같다.

아래와 같은 경우를 생각해보자.

추론

동일한 석유 데이터 사용했을 때, SES, HOLT 모델의 결과는 다르다. ( 원래 자료에서는 Holt가 더 좋음. )

Model RMSE MAPE
SES 0.9386 83.39
Holt 2.8192 217.85

아래 방법으로도 시도해 볼 수 있다.

14.1.3 Holt-Winters - ETS(A, A, A) - Holt Winter's linear method with additive errors

Table of Contents

예측을 위한 여러 단계...

Holt-Winters Additive ETS( A, A, A ) 모델의 MAPE: 128.21( 원본 ) 292.53( 실제 ) Holt-Winters Additive ETS( A, A, N ) 모델의 MAPE: 63.01( 원본 ) 217.85( 실제 )

실제로 ETS( A, A, A )의 MAPE가 높기는 한데... 영 아닌것 같다.... 너무 안 좋다...

항공 여객 데이터로 해보자.

14.1.4 Holt-Winters - ETS(A, A, M) - Holt Winter's linear method

Table of Contents

예제

항공 여객 데이터, ETS(A, A, M) model을 이용해서 지난 12개월을 예측해보자.

모델의 정확도

추론

MAPE of ETS(A,A,M) model is 16.14 and it is lesser than 101.57, MAPE of ETS(A,A,A) model 라고는 하는데... ETS( A, A, A )는 박살난 결과였기에 어디 비교할 대상도 안됨.

반면, Holt-Winter - Additive Trend and Multiplicative Seasonality model이 Holt-Winter - Additive model 보다 낫다.

14.2 모델 수립

Table of Contents

샴푸 데이터 써보자. 3년동안의 월간 샴푸 판매량이 나와 있다.총 36개의 관측값이 있다. The original dataset is credited to Makridakis, Wheelwright and Hyndman (1998). 전체 데이터는 아래 URL에 있다.

예제

14.2.1 Method 1: 시간에 따른 회귀

Table of Contents

14.2.2 Method 2: 계절성 요소를 포함한 시간에 따른 Regression

Table of Contents

14.2.3 Method 3: 일반적인 접근...: $\hat{y}_{t+1} = y_t$

Table of Contents

RMSE, MAPE 값으로 보았을 때... Naive 방법, Regression with seasonal components 방법은 데이터가 높은 변동성을 가진 경우 사용하지 않는게 좋아보인다. Naive 방법은 안정적인 데이터셋인 경우 유효하다.

다른 방버으로 성능을 올릴 수 있을 것 같다. 다른 테크닉을 알아보자.( 기대 안되기 시작함... )

14.2.4 Method 4: 단순 평균

Table of Contents

추론

점수로 보건데 모델이 전혀 좋아지지 않았다. 반면, 각 주기의 데이터가 상수 값으로 유지 되었다면 본 점수는 좋았을 것이다.( 당연한 이야기..? ) Naive 모델의 결과 값이 더 높게 나왔다고 해서 Naive 모델이 모든 데이터 셋에서 단순 평균 모델보다 더 성능이 낫다는 것은 아니다.다른 모델이 사용해서 성능을 향상 시킬수 있는지 확인해 보자.

14.2.5 Method 5: 이동 평균, Moving Average(MA)

Table of Contents

아직 까지는 윈도우 4로 이동 평균 돌린 모델의 MAPE, RMSE 값이 가장 작다. 다른 모델도 보자.

14.2.6 Method 6: SES, Simple Exponential Smoothing

Table of Contents

14.2.7 Method 7: Holt's Linear Trend Method (Double Exponential Smoothing)

Table of Contents

추론

SES 보다는 조금 낫다. 이동 평균이랑은 비교하면 안된다.

14.2.8 Method 8: Holt-Winters Method - Additive seasonality

Table of Contents

14.2.9 Method 9: Holt-Winters Method - Multiplicative Model

Table of Contents

추론

Window 4 크기의 이동 평균이 가장 성능이 좋았다...

15. 자동 회귀 모델

Table of Contents

자동 회귀( Auto-regressive, AR ), 이동 평균( Moving Average, MA ) 모델들은 예측에 자주 사용되는 모델들이다. AR, MA 모델을 합치면 ARMA라는 모델이 나온다. 초기의 ARMA와 ARIMA 모델은 1970년, Box and Jenkins가 개발했다.

ARMA 모델은 기본적으로 회귀 모델이다; 자동 회귀란 것은 여러 구간에서 변수들이 자체적으로 회귀를 돌려서 값이 나온다는 의미이다. AR 모델의 제 1가정은 시계열이 보합상태인 것이다. 안정화된 시계열 데이터라는 것은 mean, variance, autocorrelation 등의 지표가 모든 구간에서 동일하게 나온다는 의미이다.

시계열 데이터가 안정적이지 않으면, AR 모델 적용전에 데이터를 변형해야 한다.(???)

Lags

연속적인 관찰값과의 차이를 lag - 1 차이라고 불러보자. 계절성이 있는 시계열 데이터의 경우, Lag는 계절성 기간 동안에 나타날 것이다.

잔차의 White noise:

White noise는 잔차( $\epsilon_t$ )들의 결과이다. 서로 상관되어 있지 않고, 평균이 0이고, 표준편차가 상수인 정규 분포를 따른다. AR 모델의 제 1가정은 Error가 White noise를 따른다는 것이다.

Auto-Regressive (AR) Models

Auto-Regression은 여러 시점에서 측정된 변수를 회귀하는 방법이다. Lag 1을 가지는 Auto-Regressive model은 AR(1)로 표현되고, 아래와 같은 성격을 가진다.

Augmented Dickey Fuller Test ( ADF )은 보합인지 확인하는 단위 Root 테스트이다.

AR Model indentification

Auto-Correlation Function (ACF) or correlogram and Partial Auto-Correlation Function (PACF)

Autocorrelation Function (ACF)

서로 다른 Lag에 대한 자기 상관계수를 Plot 한 것을 ACF라 한다.

Plot은 관찰값들과 Lag 값들간의 상관관계를 함축해서 보여준다. X 축은 Lag, Y 축은 상관계수를 나타낸다. ( Plot 이 없는데...?, 작성하다가 누락한 듯.. )

Partial Autocorrelation Function (PACF)

서로 다른 Lag에 대한 부분 자기 상관 계수를 Plot 한것을 PACF라 한다.

관찰값과 Lag 값의 상관관계를 보여준다. Lag 값들은 이전의 Lag 값들에 사용되지 않는다.

두 그림( ??? 역시 그림 없음. ) 두 개 Plot은 95%, 99% 신뢰 구간에 따른 Bar chart 이다. The number of lags is p when:

ˆ* The model is AR if the ACF trails off after a lag and has a hard cut-off in the PACF after a lag. This lag is taken as the value for p.

ˆ* The model is MA if the PACF trails off after a lag and has a hard cut-off in the ACF after the lag. This lag value is taken as the value for q.

ˆ* The model is a mix of AR and MA if both the ACF and PACF trail off.

Plot ACF and PACF

ADF로 보아하니, 본 데이터는 Stationary 하지 않다. Differencing - Lag 1을 시도해 본다.

2차례 Differencing 하고 나니 Stationary 해졌다....

Lag differeced 에 따른 ACF, PACF 결과를 살펴보자. ( Cut off의 의미를 알아야 하는데 잘 모르겠음..., 왜 Lag 5, 2가 선택되었는지 잘 모르겠음... )

d = 2로 설정한다. 2차례의 Differencing을 걸쳐 데이터가 Stationary 해졌기 때문이다.

15.1 Random Walk

Table of Contents

random walk는 수학적 기법이다. Stochastic, Random process라고 알려져 있는데, 특정 Integer 구간에서 연속적인 Random steps로 구성된 것을 의미한다.

An elementary example of a random walk is the random walk on the integer number line, ${\displaystyle \mathbb {Z} } $, 0 에서 각 Step을 +1 이나 -1로 동일한 확률로 이동하는 것을 의미한다.

Random walk process is defined as: y(t) = $\beta_0 + \beta_1 X_{t-1}$ + $\epsilon_t$

where

Random Walk and Autocorrelation

각 관찰값과 그 이전 관찰값 사이의 상관 관계를 계산한다.
자기 상관 관계에 대해서 그림을 그리고, 자기 상관 관계 함수 도표를 그린다.
이전 관찰값과 강한 자기 상관 관계가 있다고 예상하고, 이전의 Lag 값과도 선형적으로 떨어져 있다고 예상한다.

Random Walk and Stationarity

시계열 데이터가 시간에 의한 함수가 아닌 경우, Stationary 시계열을 갖는다...?
Random walk의 관찰값이 시간에 종속적인 것을 안다. 현재의 관찰값은 과거 관찰값의 Random step이기 때문이다.
모든 Non stationary 시계열 데이터가 Random walks는 아니며, Non stationary 시계열 데이터가 시간에 따른 mean, variance를 갖는 것은 아니다...?
Random walk의 Non stationary 속성을 통계적 Test( 특히, Augmented Dickey-Fuller test )를 통해서 확인해야 한다.

Predicting a Random Walk

Rrandom walk로는 합리적인 예측을 할 수 없다.
우리는 보통 과거의 관측값을 이용해서 다음 단계의 값을 예측하는 것을 최선의 선택이라고 생각한다. Random walk 또한 다음 단계의 값이 이전 단계의 값을 이용한 함수라는 것을 알 고 있다. Naive forecast 혹은 Persistence model 이라고 부르기도 한다.

예제

이번 예제에서는, Random walk를 하기 위해서 동일한 Seed를 이용해 Random number를 만들어내는 함수를 이용할 것이다.

추론

Random walk with drift

Table of Contents

Example 2

주식 수익을 Drift가 있는 Random walk로 Simulation 해보자.

주식 가격은 아래와 같이 시뮬레이션 한다.

Random walk with drift 시뮬레이션 결과를 그려보자.

추론

15.2 Arima Model

Table of Contents

대표적으로 시계열 예측에 사용되는 방법 중 하나는 ARIMA 모델이다. Auto regressive + Moving Average 이다. AR, I, MA 로 분해해서 볼 수 있는데:

AR(p): Autoregressive model, p는 얼마나 Lagged된 시리즈를 예측할 것인지를 결정하는 파라미터

I(d): Differencing part, d는 Series를 Stationary하게 만들기 위해서 얼마나 많이 Differencing 해야 하는지에 대한 파라미터이다.

MA(q): Moving average model, q는 예측 수식에서 Lagged 예측 Error term의 개수이다.

SARIMA는 계절성이 들어간 ARIMA이고, 계절성이 있는 경우에 사용된다.

Let's see the example of data from quandl의 데이터를 살펴보자. 영란은행의 EURO - US Dollar Spot 환율 데이터이다.

dickey fuller test로 Stationary test

검정 통계량이 5% Critical value보다 크고, p-value는 0.05보다 크다. Moving average는 상수가 아이며, H0 가설은 기각할 수가 없다. 결국, 주간 데이터 역시 Stationary 하지 않다.

어떤 방법을 써서라도, Stationary로 만들어야 겠다...

Differencing

Stationary 한 데이터로 만들기 위해서 Differencing을 수행한다. 수행 전에 Log 데이터로 변환하는 것이 낫겠다.

추론

로그로 만드니까, Critical value는 1%보다 작고, 99% 신뢰 구간에 들어온다. Stationary 한 모델에 쓸 수 있는 ARIMA를 사용할 수 있게 되었다.

ACF, PACF를 기반으로 추론.

p, q 값을 정해보자.

  1. p: the lag value where the PACF cuts off (drop to 0) for the first time. So here p =2.
  2. q: the lag value where the ACF chart crosses the upper confidence interval for the first time. if you look closely q=1.

모델 우리가 원하는 결과를 보여주었다. Model의 예측 값을 원래 Scale로 복원해서 보자. 단, First order differencing을 제거하고, prediction을 원래 Scale로 만들기 위해서 Exponent 해야 한다.

15.3 Auto Arima

Table of Contents

이것은 서로 다른 조합의 p, q, d 값들을 이용하고, 이의 최적값을 만들기 위해 AIC (Akaike Information Criterion)와 BIC(Bayesian Information Criterion) values 값을 가용한다.

auto.arima

auto.arima 모듈은 단일 시계열 데이터에 대해서 AIC, AICc, BIC 값을 이용해서 최적읜 Model을 만들어 낸다. 이 함수는 주어진 제약사항 내에서 가능한 모델을 전부 검색하는 기능을 수행한다.

AIC

The Akaike information criterion (AIC)는 주어진 데이터에 대한 통계 모델의 상대적인 품질을 측정하는 방법이다. AIC를 통해서 모델을 선택할 수 있다.

AICc는 AIC 작은 Sample size를 가진 것을 보정한 것이다.

BIC

Bayesian information criterion (BIC) 혹은 Schwarz information criterion (also SIC, SBC, SBIC)은 유한한 세트의 모델에서 모델을 선택하는 어떤 기준이다. BIC 값이 가장 작은 것을 선택하는 것이 좋다. Likelihood function이 사용되는데 AIC와 연관되어 있다.

트랙터 판매량 데이터를 auto.arima로 돌려보자.

추론

추세와 Multiplicative 계절성이 있는 것이 보여진다. Window size 4, 6, 8, 12로 MA를 돌려보자.

Dickey-Fuller Test - Let's run the Dicky Fuller Test on the timeseries and verify the null hypothesis that the TS is non-stationary.

표준편차의 분산이 작지만, Rolling mean이 시간에 따라 증가하므로, Stationary 하지 않다. 검정 통계량 역시 Critical value 보다 높다. 위 그래프로 보아 월별 패턴이 있는 것으로 보여진다. Seasonal component를 분해해보자.

Seasonality – Time Series Decomposition

월별로 트랙터 판매량이 얼마나 변화했는지를 보자. 연도별 누적 Plot으로 확인해 볼 수 있다.

추론

트랙터 판매량은 매년 감소 없이 꾸준히 증가한다. 7, 8월 판매량이 Peak 이고, 해당 월의 변동폭도 다른 월보다 크다. 월별 Mean 값을 보면 1년 동안 판매량이 늘었다가 줄어드는 추세가 보여진다. Seasonal effect가 12개월에 걸친 Cycle이란 얘기이다.

Time Series Decomposition

본 분석에 대한 몇가지 주요 관측 결과:

1) Trend( 추세 ): 12개월 MA가 직선과 유사해서, 선형 회귀 방법을 사용할 수 있다.

2) Seasonality( 계절성 ): 월별로 일정한 패턴을 보인다. 월별 Seasonal component는 월별 Trend 값을 뺀 값이다. 추세 값은 아래 수식으로 제거된다.

Seasonality_t × Remainder_t = Y_t/Trend_t

3) Irregular Remainder (random): 추세와 계절성을 제거한 후 잔차 값이다. 계산은 아래 식으로 이루어진다.

Remainder_t = Y_t / (Trend_t × Seasonality_t)

We observe seasonality even after differencing.

We observe trend and seasonality even after taking log of the observations.

Nonstationary series have an ACF that remains significant for half a dozen or more lags, rather than quickly declining to zero. You must difference such a series until it is stationary before you can identify the process

The above ACF is “decaying”, or decreasing, very slowly, and remains well above the significance range (blue band) for at least a dozen lags. This is indicative of a non-stationary series.

Inference

The above ACF has “decayed” fast and remains within the significance range (blue band) except for a few (5) lags. This is indicative of a stationary series.

Inference

For ARIMA(p, d, q) × (P, D, Q)S, we got SARIMAX(0, 1, 1)x(1, 0, 1, 12)12 model with the least AIC:-600.0908420381976

Here,

Predict sales on in-sample date using the best fit ARIMA model

Forecast sales using the best fit ARIMA model

Plot ACF and PACF for residuals of ARIMA model to ensure no more information is left for extraction

Inference

We need to ensure that the residuals of our model are uncorrelated and normally distributed with zero-mean. If it is not that it signifies that the model can be further improved and we repeat the process with the residuals.

In this case, our model diagnostics suggests that the model residuals are normally distributed based on the following:

  1. The KDE plot of the residuals on the top right is almost similar with the normal distribution.
  2. The qq-plot on the bottom left shows that the ordered distribution of residuals (blue dots) follows the linear trend of the samples taken from a standard normal distribution with N(0, 1). Again, this is a strong indication that the residuals are normally distributed.
  3. The residuals over time (top left plot) don't display any obvious seasonality and appear to be white noise. This is confirmed by the autocorrelation (i.e. correlogram) plot on the bottom right, which shows that the time series residuals have low correlation with lagged versions of itself.

Those observations coupled with the fact that there are no spikes outside the insignificant zone for both ACF and PACF plots lead us to conclude that that residuals are random with no information or juice in them and our model produces a satisfactory fit that could help us understand our time series data and forecast future values. It sems that our ARIMA model is working fine.

16. References

Table of Contents

  1. Time Series lecture by Great Learning by great lakes(https://www.youtube.com/watch?v=FPM6it4v8MY)(Myself Ex-PG Student)
  2. Machine Learning Mastery by Jason Brownlee (https://machinelearningmastery.com/)
  3. Introduction to Time Series Analysis by (Douglas C Montgomery, Cheryl L Jennings,Murat Kulachi)